package lk.icta.core.dao;

import lk.icta.core.entity.GOInterestInformation;
import lk.icta.user.entity.User;

import java.util.List;

/**
 * @author Tharanga Punchihewa
 */
public interface GOInterestInformationDAO {

    /**
     * Adding GO Information
     *
     * @param user                  The user requesting add GO Information
     * @param goInterestInformation The GO Information  User to be added
     */
    public void addGOInterestInformation(GOInterestInformation goInterestInformation, User user);

    /**
     * update GO Information
     *
     * @param user                  The user requesting update GO Information
     * @param goInterestInformation The GO Information  User to be update
     */
    public void updateGOInterestInformation(GOInterestInformation goInterestInformation, User user);

    /**
     * get GO information by id
     */
    public GOInterestInformation getGOInterestInformationById(long goInterestInformationId);

    /**
     * get GO information  list  by state
     *
     * @param state state of the GO information
     */
    public List<GOInterestInformation> getGOInterestInformationListByState(GOInterestInformation.State state);

    /**
     * get GO information  list  to be edited
     *
     * @param user The user requesting to edit GO Information
     */
    public List<GOInterestInformation> getGOInterestInformationListToBeEdited(User user);

    /**
     * get GO information  list to Active/InActive
     *
     * @param user The user requesting to Active/InActive GO information
     */
    public List<GOInterestInformation> getGOInterestInformationList(User user);

    /**
     * get GO information  list by state
     *
     * @param user The user requesting to  GO information By OrganizationId
     */
    public List<GOInterestInformation> getGOInterestInformationListByOrganizationId(User user);
}
